package com.kalix.admin.core.biz;

import com.kalix.admin.core.api.biz.IPermissionService;
import com.kalix.framework.core.api.persistence.UserEntity;
import com.kalix.framework.core.impl.security.LoginService;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by dell on 14-3-25.
 */

public class UserLoginServiceImpl extends LoginService{ //implements ILoginService {
    //private IUserBeanDao userBeanDao;
    private IPermissionService permissionService;

//    /**
//     * 设置cookie
//     *
//     * @param response
//     * @param name
//     * @param value
//     * @param maxAge
//     */
//    private static void setCookie(HttpServletResponse response, String name,
//                                  String value, int maxAge) {
//        if (value == null) {
//            value = "";
//        }
//        Cookie cookie = new Cookie(name, value);
//        cookie.setMaxAge(maxAge);
//        cookie.setPath("/");
//        response.addCookie(cookie);
//    }

//    @Override
//    public boolean validateUserStatus(String username) {
//        UserBean user = userBeanDao.getUser(username);
//
//        if (user == null) {
//            throw new UnknownAccountException("Unknown Account Exception!");
//        }
//        if (user.getAvailable() == 0) {
//            throw new LockedAccountException("Unknown Account Exception!");
//        }
//
//        return true;
//    }
//
//    @Override
//    public Map login(String username, String password) {
//        Map map = new HashMap();
//        int result = -1;
//
//        UserBean user = userBeanDao.getUser(username);
//        if (user == null) {
//            throw new UnknownAccountException("Unknown Account Exception!");
//        }
//        if (user.getAvailable() != 1L) {
//            throw new LockedAccountException("Account LockedException!");
//        }
//        //判断密码和用户类型是否对应
//        if (MD5Util.encode(password).equals(user.getPassword())) {
//            Map resMap = new HashMap();
//            resMap.put("user_id", user.getId());
//            resMap.put("name", user.getName());
//            resMap.put("user_name", user.getLoginName());
//            resMap.put("password", user.getPassword());
//            resMap.put("user_icon", user.getIcon());
//            map.put("response", resMap);
//
//        } else {
//            throw new IncorrectCredentialsException("Incorrect Credentials Exception!");
//        }
//
//        return map;
//
//    }
//
//    @Override
//    public void updateUserLoginInfo(long id, String loginIp) {
//        userBeanDao.updateUserLoginInfo(id, loginIp);
//    }

    @Override
    public List<String> getUserPermission(String username) {
        List<String> stringList = new ArrayList<String>();
        UserEntity userBean = dao.getUser(username);

        if (userBean != null) {
            stringList.addAll(permissionService.getApplicationCodesByUserId(userBean.getId()));
            stringList.addAll(permissionService.getFunctionCodesByUserId(userBean.getId()));
        }

        return stringList;
    }

//    private String encrypt(String text) {
//        return MD5Util.encode(text);
//    }

//    @Override
//    public Map loginByPhone(String username, String password, String client,
//                            HttpServletRequest request, HttpServletResponse response) {
//        Map map = new HashMap();
//        int result = -1;
//        try {
//            UserBean user = userBeanDao.findUnique("select u from UserBean u where u.loginName=?1", username);
//            if (user != null && password.equals(user.getPassword())) {
//                logon(user, client, request, response);
//                result = 1;
//                Map resMap = new HashMap();
//                resMap.put("id", user.getId());
//                resMap.put("name", user.getName());
//                resMap.put("login_name", user.getLoginName());
//                resMap.put("password", user.getPassword());
//                map.put("response", resMap);
//            }
//        } catch (Exception e) {
//            map.put("errorCode", ErrorCodeValue.INNER_ERROR);
//            e.printStackTrace();
//        } finally {
//            map.put("result", result);
//        }
//        return map;
//    }

//    private HashMap logon(UserBean user, String client, HttpServletRequest request, HttpServletResponse response) throws Exception {
//        int rs = 1;
//        HashMap rsMap = new HashMap();
//        try {
//            String map_provide = "1";//先设成1 用时再改
//            //String value = user.getId()+"::"+user.getLoginName()+"::"+user.getName()+"::"+map_provide+"::"+client;
//            String value = user.getId() + "::" + user.getLoginName();
//            int maxAge;
//            if (client.equals("0")) {
//                maxAge = 24 * 60 * 60;
//            } else {
//                maxAge = 60 * 24 * 60 * 60;
//            }
//            //String key = UtilTools.generateKey().toString();
//            //value = UtilTools.encryptString(key, value);
//            //value = URLEncoder.encode(value + "||" + key, "UTF-8");
//            setCookie(response, "jldaren.cooperate", value, maxAge);
//            rsMap.put("result", rs);
//            rsMap.put("user", user);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return rsMap;
//    }

//    @Override
//    public Map updateToken(HttpServletRequest request, String token, Long user_id) {
//        int result = -1;
//        Map map = new HashMap();
//        try {
//            if (user_id != null) {
//                userBeanDao.update("update UserRelBean u set u.token=null where u.token='" + token + "'");
//                userBeanDao.update("update UserRelBean u set u.token='" + token + "' where u.user_id=" + user_id);
//                result = 1;
//            }
//        } catch (Exception e) {
//            map.put("errorCode", ErrorCodeValue.INNER_ERROR);
//            e.printStackTrace();
//        } finally {
//            map.put("result", result);
//        }
//        return map;
//    }

//    public void setUserBeanDao(IUserBeanDao userBeanDao) {
//        this.userBeanDao = userBeanDao;
//    }

    public void setPermissionService(IPermissionService permissionService) {
        this.permissionService = permissionService;
    }
}
